# 从若干副扑克牌中随机抽 5 张牌，判断是不是一个顺子，即这5张牌是不是连续的。2～10为数字本身，A为1，J为11，Q为12，K为13，
# 而大、小王为 0 ，可以看成任意数字。A 不能视为 14。
#
# 来源：力扣（LeetCode）
# 链接：https://leetcode.cn/problems/bu-ke-pai-zhong-de-shun-zi-lcof
# 输入: [1,2,3,4,5]
# 输出: True
# 输入: [0,0,1,2,5]
# 输出: True


class Solution:
    def isStraight(self, nums: list) -> bool:
        nums.sort()
        num_0 = idx = 0
        while nums[idx] == 0:
            idx += 1
            num_0 += 1
        # 如果存在非0的重复元素，则返回False
        if len(set(nums[idx:])) != 5 - num_0:
            return False
        # 计算非0数的差值，如果差值等于0的个数则返回True,否则返回False
        diff = 0
        for i in range(idx, len(nums) - 1):
            diff += nums[i+1] - nums[i] - 1

        return num_0 >= diff


# 不能有重复元素， 最大值减去非0最小值 < 5 则返回True
class Solution1:
    def isStraight(self, nums: list) -> bool:
        nums.sort()
        idx_0 = 0
        for i in range(4):
            if nums[i] == 0:
                idx_0 += 1
                continue
            if nums[i] == nums[i + 1]:
                return False
        return nums[4] - nums[idx_0] < 5



